Wichtig !!! N E U E S ... Inhalt  Hotline Stichwortverzeichnis

Omikron Basic 6 Native für PowerMac
 Version 6.13 vom 16.2.1998
 Handbuch
Kapitel 5-5
Der Befehlssatz:     FN  -  INPUT USING



 

  FN
Typ: Funktion
Syntax:  FN <Variable>[(<Ausdruck>[[,<Ausdruck>]])] 
FN <Funktions-Variable>[(<Parameter>[[,Parameter]])]
Erklärung:  Ruft eine durch DEF FN definierte Funktion auf und weist der Funktions-Variablen den Funktionswert zu. Die in der Definition genannten Parameter müssen in Klammern und durch Kommata getrennt übergeben werden.
Beispiel:
    PRINT FN Dreifach(3) 
    PRINT FN Primzahl$(12) 
    END 

    DEF FN Dreifach(A)=3*A 
    DEF FN Primzahl$(A) 
     LOCAL N,P$="Primzahl" 
     FOR N=2 TO SQR(A) 
      IF A MOD N=0 THEN P$="keine Primzahl" 
     NEXT N 
     RETURN P$ 
    END_FN

Ergebnis: 
     9 
    keine Primzahl 
siehe auch:  DEF FN   END_FN   RETURN
 

 
 
  FOR 
Typ: Befehl 
Syntax:  FOR <num.Variable>= <num.Ausdruck>TO <num.Ausdruck>[STEP] <num.Ausdruck><Befehle>NEXT [<num.Variable>][[,<num.Variable>]] 
FOR <Schleifenvariable>= <Start>TO <End>[STEP <Schrittweite>] <Schleifeninhalt>NEXT [<Schleifenvariable>] 
Erklärung:  Das ist die wohl bekannteste Programmschleife. Der Schleifenvariablen wird zu Beginn der Startwert zugewiesen, welcher sodann bei jedem neuen Durchlauf um die Schrittweite erhöht oder erniedrigt wird. Fehlt die Schrittweite, so wird sie automatisch auf "+1" festgelegt. 
Mögliche Schleifenvariablen sind alle einfachen Variablentypen, jedoch keine Feldelemente. Wenn die Schleifenvariable abwärts gezählt werden soll, ist eine negative Schrittweite anzugeben (z.B. "-1"). 
Wenn die Schleifenbedingung gleich zu Anfang nicht erfüllt ist (z.B. Startwert ist größer als Endwert bei positiver Schrittweite), dann wird die Schleife überhaupt nicht durchlaufen. Die FOR ... NEXT Schleife ist also eine abweisende Schleife. 
Die Schleife wird geschlossen durch die NEXT-Anweisung wobei die Schleifenvariable weggelassen werden kann. Die NEXT-Anweisung bezieht sich dann immer auf die letzte FOR-Anweisung. 
Die Schleife kann auch vorzeitig mit EXIT verlassen werden.  
Beispiel:
    FOR X#=-PI TO PI STEP .1# 
     PRINT X# 
    NEXT 

    DIM A(10) 
    FOR I=0 TO 10 
     A(I)=RND(20):PRINT A(I) 
    NEXT I 
    Maximum=0 
    FOR I=0 TO 10 
     Maximum=MAX(Maximum,A(I)) 
    NEXT I 
    PRINT "Die größte Zahl ist: ";Maximum 

Ergebnis: 
    Zunächst werden Zahlen zwischen -PI und PI im Abstand von 0.1 ausgegeben. 
    Die zweite Schleife schreibt 11 Zufallszahlen zwischen 0 und 20 auf den Bildschirm. 
    Die dritte Schleife schließlich gibt die größte dieser Zufallszahlen aus:
    Die größte Zahl ist: .... 
siehe auch:  NEXT   WHILE   REPEAT 
 
 

  FORM_ALERT 
Typ: Befehl 
Syntax:  FORM_ALERT (<num.Ausdruck>,<String-Ausdruck>[,<Variable>) 
FORM_ALERT (<Default>,<Warnmeldung>[,<Rückgabe>) 
Erklärung:  Stellt eine Warn-Box dar. <Default> gibt an, welcher der in <Warnmeldung> genannten Knöpfe durch die Return-Taste ausgelöst werden kann. Soll dies für keinen gelten, so ist <Default> gleich 0 zu übergeben. 
Die Warnmeldung ist folgendermaßen aufgebaut: 

[Icon][Zeile 1|Zeile 2|Zeile 3|Zeile 4|Zeile 5|][Knopf 1|Knopf 2| Knopf 3] 

Icon ist eine Zahl zwischen 0 und 3:

0: kein Icon 
1: Achtung-Symbol 
2: Hinweis-Symbol 
3: Stop-Symbol

Andere Werte können zu Störungen im Layout der Alertbox oder sogar zum Absturz führen. Die Zeilen dürfen jeweils höchstens 39 Zeichen lang sein. Die Knopfgröße orientiert sich an der Länge des jeweiligen Textes (notfalls Leerzeichen einfügen, um einen breiteren Knopf zu erhalten). 
Nach Ausführung enthält <Rückgabe> die Nummer des gewählten Knopfes. 

Achtung: Wenn die Maus ausgeschaltet ist, so muß sie vor dem Aufruf unbedingt eingeschaltet werden, da man sonst die Buttons der Alert-Box nicht bedienen kann. 
Beispiel:
    Datei$="Abfall" 
    FORM_ALERT (1,"[2][Die Datei|"+Datei$+"|wird unwiderruflich gelöscht.][OK|Abbruch]",Datei_Ex) 
    IF Datei_Ex=1 THEN KILL FN Get_Fsspec$(0,0,Datei$) 
Ergebnis: 
    Wenn die Rückfrage in der Alert-Box bestätigt wird, so wird die Datei Abfall im aktuellen Ordner gelöscht.
siehe auch: 
 
 

  FRAC 
Typ: Funktion 
Syntax:  FRAC(<num.Ausdruck>) 
Erklärung:  Ergibt den Nachkommateil des numerischen Ausdrucks. Das Vorzeichen bleibt erhalten. Das Gegenstück zu FRAC ist FIX
Beispiel:
    PRINT FRAC( PI ),FRAC(5.36),FRAC(-5.36) 
Ergebnis: 
     0.141592651727148   .36   -.36 
siehe auch:  FIX   INT 
 
 

  FRE 
Typ: Befehl 
Syntax:  FRE <num.Ausdruck> 
FRE <Speicheradresse> 
Erklärung:  Gibt einen durch MEMORY reservierten Speicherbereich wieder frei. Als Speicheradresse ist die Adresse anzugeben, die beim Aufruf von MEMORY zurückgegeben wurde. 
Beispiel:
    Puffer=MEMORY(1024) 
    PRINT "Puffer angelegt bei: ";HEX$(Puffer) 
    FRE Puffer 
Ergebnis: 
    Ein Puffer wird angelegt und der Vorgang auf dem Bildschirm dokumentiert. Danach wird der Puffer mit FRE wieder freigegeben. 
siehe auch:  FRE als Funktion   MEMORY   CLEAR 
 

 
 
  FRE
Typ: Funktion 
Syntax:  FRE({<num.Ausdruck>|<String-Ausdruck>}) 
FRE({<Dummy>|<Laufwerk>}) 
Erklärung:  Wird ein numerischer Dummy angegeben, so ergibt die Funktion den für den Benutzer freien BASIC-Speicher, nachdem der String-Heap aufgeräumt wurde (garbage collection). Der Wert des Dummys ist dabei ohne Belang. 
Wird ein Leerstring (="") übergeben, so ergibt die Funktion den für den Benutzer freien BASIC-Speicher, ohne daß zuvor eine garbage collection durchgeführt wird. 
Sonst wird der String-Ausdruck als Volume-Bezeichner interpretiert, und der auf diesem Volume freie Speicherbereich ermittelt. 
Beispiel:
    PRINT FRE(0), FRE(""), FRE("MacintoshHD:") 
Ergebnis: 
    Es werden drei Zahlen ausgegebn, welche den jeweils freien Speicher in Byte enthalten. 
siehe auch:  FRE als Befehl   MEMORY   CLEAR
 
 

FSEL_INPUT
siehe: FILESELECT
 

  GEMDOS 
Erklärung:  hat in Omikron Basic 6 keine Bedeutung und wird vom Compiler ignoriert. Bitte nicht verwenden.
 
 

  GET 
Typ: Befehl 
Syntax:  GET <num.Ausdruck>,{<num.Ausdruck>[,<num. Ausdruck]|<String-Variable>,<num.Ausdruck>} 
1: GET <Dateinummer>,<Satznummer> 
2: GET <Dateinummer>,<Speicheradresse>,<Anzahl> 
3: GET <Dateinummer>,<String-Variable>,<Anzahl> 
Erklärung:  Nach Syntax 1 wird ein Datensatz aus der durch die Dateinummer gegebenen Datei gelesen und den in FIELD genannten Puffervariablen zugewiesen. Die Datei muß zuvor mittels OPEN "R" geöffnet worden sein.  Ist der Datensatz nicht vorhanden, so enthalten die Puffervariablen Leerzeichen.  Man kann das jederzeit mit der Funktion EOF prüfen, die in diesem Fall den Wert "-1" (=wahr) zurückgibt. 
Nach Syntax 2 und 3 wird aus der durch die Dateinummer gegebenen Datei die angegebene Anzahl Zeichen gelesen und ab der Speicheradresse bzw. in der String-Variablen abgelegt. Die Datei muß zuvor mit OPEN "U" geöffnet worden sein. Gelesen wird ab der aktuellen Dateiposition, die mit SEEK gesetzt werden kann. 
GET kann auch benutzt werden, um Daten von der Modemschnittstelle bzw. von der Druckerschnittstelle zu holen. In diesem Fall muß der Kanal zuvor mit OPEN "V" bzw. OPEN "P" geöffnet worden sein. 
Beispiel:  
Ergebnis:   
siehe auch:  PUT   FIELD   OPEN 
 
 

  GOSUB 
Typ: Befehl 
Syntax:  GOSUB <Marke> 
Erklärung:  Verzweigt in das durch <Marke>definierte Unterprogramm. Vom Unterprogramm aus kann mittels RETURN  wieder in das Hauptprogramm zurückgesprungen werden. Dann wird als nächstes der auf die GOSUB-Anweisung folgende Befehl ausgeführt. 
Die im Unterprogramm verwendeten Variablen sind global (siehe LOCAL). In Omikron Basic geschriebene Programme können im Prinzip vollständig auf GOSUB verzichten, da ein Unterprogrammaufruf immer auch mittels einer Prozedur verwirklicht werden kann. Ein Unterprogramm per GOSUB aufzurufen ist eigentlich nicht mehr zeitgemäß. Aus Gründen der Kompatibilität wurde der Befehl allerdings im Sprachumfang belassen. 
Beispiel:  
Ergebnis:   
siehe auch:  RETURN   GOTO   DEF PROC 
 
 

  GOTO 
Typ: Befehl 
Syntax:  GOTO <Marke> 
Erklärung:  Verzweigt an die durch <Marke>definierte Stelle im Programm. Generell führt die Verwendung von GOTO sehr schnell zu sehr unübersichtlichen Programmen. Man sollte daher zu viele GOTOs nach Möglichkeit vermeiden. Die strukturierte Programmierung, wie sie von Omikron Basic unterstützt wird, kommt in jedem Falle auch ganz ohne GOTO aus. Es ist jedoch nicht auszuschließen, daß in dem einen oder anderen Fall (z.B. bei nicht behebbaren Fehlern) ein GOTO einfach praktischer ist.

Achtung: Verzweigen Sie niemals in eine Struktur (Schleife oder SELECT ... CASE) oder in eine Prozedur. Sprünge per GOTO sind nur in der gleichen Hierarchie-Ebene erlaubt. Um eine Struktur vorzeitig zu verlassen, verwenden Sie EXIT
Beispiel:  
Ergebnis:   
siehe auch:  GOSUB  ON   DEF PROC 
 
 

  GRAF_PORT
Typ: Befehl 
Syntax:  GRAF_PORT <num.Ausdruck> 
GRAF_PORT {<0>|<1>|<GrafPtr>}
Erklärung:  Mit diesem Befehl ist es möglich, alle nachfolgenden Zeichenbefehle sowie PRINT und WRITE in den angegebenen GraficsPort umzuleiten. In dem numerischen Ausdruck muß 0,1 oder ein gültiger <GrafPtr> übergeben werden. Wie Sie selbst einen neuen GraficsPort öffnen können, ist in "Inside Macintosh, Imaging with QuickDraw" erläutert.
Der GRAF_PORT 1 Befehl überprüft zunächst, ob schon eine Seite auf dem Drucker geöffnet wurde. Wenn ja, erfolgen alle Ausgaben auf diese Seite, ansonsten wird eine neue Seite geöffnet. Wenn Sie mehr als eine Seite auf einmal bedrucken wollen, können Sie mit LPRINT CHR$(12); (Form Feed) erreichen, daß eine neue Seite angefangen wird.
Mit GRAF_PORT 0 schließlich beenden Sie die Druckroutine, die letzte Seite wird geschlossen und das ganze Dokument (kann aus mehreren Seiten bestehen) wird auf dem Drucker ausgegeben.

Achtung: Ungültige Werte hinter GRAF_PORT führen meißt zur sofortigen Beendigung des Programms oder gar zum Absturz des ganzen Systems. Auch wenn nur das Programm beendet wurde, sollte der Rechner neu gestartet werden, da es sonst zu unkalkulierbarem Verhalten kommen kann.

Die Werte 0 und 1 sind vom Omikron Basic vordefiniert: 

0: Alle Ausgaben landen auf dem Bildschirm bzw. im obersten Ausgabefenster. 
1: Alle Ausgaben werden auf dem Drucker gemacht. 

Hinweis: Die Befehle INPUT und INPUT USING sowie FORM_ALERT setzen den GRAF_PORT immer auf 0 zurück
Beispiel:
    Kreis 0,1,"Dieser Keis wird auf dem Bildschirm gezeichnet" 
    Kreis 1,4,"Dieser Keis wird auf Papier gezeichnet" 
    GRAF_PORT 0 

    DEF PROC Kreis(GrafPtr,F,Text$) 
     GRAF_PORT GrafPtr 
     PRINT Text$ 
     CIRCLE 200*F,220*F,100*F 
    END_PROC

Ergebnis: 
    Es wird zunächst der Text auf dem Bildschirm ausgegeben und danach ein Kreis gezeichnet. Anschließend erfolgt das Gleiche noch einmal auf Papier. Man kann also ein und dieselbe Zeichenroutine für die Ausgabe auf verschiedenen Geräten benutzen. Die Verwendung des Scalierungsfaktors F ermöglicht es außerdem, von der höheren Druckerauflösung zu profitieren. 
siehe auch:  CMD  LPRINT
 
 

  HCOPY 
Typ: Befehl 
Syntax:  HCOPY 
Erklärung:  Wenn das OUTPUT_WINDOW eingeschaltet ist, wird eine Hardcopy des Puffers gemacht, der zum obersten Fenster gehört, sonst wird der komplette Bildschirminhalt auf dem Drucker ausgegeben. 
Beispiel:  
Ergebnis:   
siehe auch: 
 

 
 
  HCOPY TEXT 
Erklärung:   hat in Omikron Basic 6 keine Bedeutung und wird vom Compiler ignoriert. Bitte nicht verwenden.
 
 

HEIGHT
Erklärung: siehe TEXT HEIGHT
 
 

HELP
Erklärung: siehe ON HELP GOSUB
 
 

  HEX$ 
Typ: Funktion 
Syntax:  HEX$(<num.Ausdruck>) 
Erklärung:  Wandelt den numerischen Ausdruck in eine Zeichenkette um, die den gerundeten Wert des Ausdrucks als Hexadezimalzahl darstellt. 
Beispiel:
    PRINT HEX$(255), HEX$(-255), HEX$(-1) 
Ergebnis: 
    $FF   -$FF   -$1 
siehe auch:  BIN$  OCT$   VAL 
 
 

  HIGH 
Typ: Funktion 
Syntax:  HIGH(<num.Ausdruck>) 
Erklärung:  Ermittelt die oberen 16 Bit des in Long-Integer-Format gewandelten numerischen Ausdrucks. Gegenstück zu dieser Funktion ist LOW. 
Beispiel:
    PRINT HEX$(HIGH($12346789)), HIGH(-1) 
Ergebnis: 
    $1234   -1 
siehe auch:  LOW 
 
 

  H_CHAR 
Typ: Funktion 
Syntax:  H_CHAR 
Erklärung:  Diese Funktion gibt an, wieviele Zeichen untereinander auf den Bildschirms passen. Das hängt natürlich von dem eingestellten Zeichensatz und der Zeichengröße ab.
Beispiel:  
Ergebnis:   
siehe auch:  H_PIXEL   W_CHAR   W_PIXEL 
 
 

  H_PIXEL 
Typ: Funktion 
Syntax:  H_PIXEL 
Erklärung:  Diese Funktion ergibt die Höhe des Bildschirms in Pixeln. 
Beispiel:  
Ergebnis:   
siehe auch:  H_CHAR   W_CHAR   W_PIXEL 
 
 

IF ... THEN ... ELSE ... ENDIF
Typ: Befehl
Syntax: IF <num.Ausdruck>THEN <Befehle>[ELSE <Befehle>] [ENDIF
IF <log.Ausdruck>THEN <abhängige Befehle (wahr) [ELSE <abhängige Befehle (falsch)>] [ENDIF]
Erklärung: Die IF...THEN Anweisung erlaubt die bedingte Ausführung von Befehlen. Die von der THEN-Anweisung abhängigen Befehle werden nur ausgeführt, wenn der logische Ausdruck wahr (ungleich 0) ist. Die von der ELSE-Anweisung abhängigen Befehle entsprechend bei falschem logischen Ausdruck (gleich 0). Wenn alle abhängigen Befehle in eine Zeile passen, kann das ENDIF entfallen. Ansonsten beschließt das ENDIF den Block der abhängigen Anweisungen. Stehen sehr viele Alternativen zur Auswahle so ist in vielen Fällen die Verwendung von SELECT... CASE vorteilhafter.
Beispiele:
     einzeilig: 
    IF <Bedingung> THEN ...IF <Bedingung> THEN ... ELSE ... 

    mehrzeilig: 
    IF <Bedingung>THEN 
      ... 
    ENDIF 

    mehrzeilig geschachtelt mit ELSE: 
    IF <Bedingung1> 
     THEN ... 
      IF <Bedingung2> 
       THEN ... 
       ELSE ... 
      ENDIF 
     ELSE ... 
    ENDIF 

Ergebnis:
siehe auch:  THEN   ELSE   ENDIF   SELECT   CASE
 
 

  IMP 
Typ: Operator 
Syntax:  <num.Ausdruck>IMP <num.Ausdruck> 
Erklärung:  Die beiden Aussagen werden logisch implement verknüpft. Die Wahrheitstabelle hierzu führt nur zu einer unwahren Aussage, wenn der erste Ausdruck wahr, er zweite aber unwahr ist. 
Beispiel:
     PRINT BIN$((%1010 IMP %1100)+%10000) 
Ergebnis: 
     %1101 
siehe auch:  OR   XOR   AND   NAND   NOR 
 
 

  INKEY$ 
Typ: Funktion 
Syntax:  INKEY$ 
Erklärung:  Holt eine Eingabe von der Tastatur. Ist keine Eingabe vorhanden, ergibt die Funktion einen Leerstring. Sonst ist der String 4 Zeichen lang. Im ersten Byte werden die Modifier-Keys zurückgeliefert. 
Die einzelnen Bits haben dabei folgende Bedeutung: 

Bit 0: Comand-Taste 
Bit 1: Shift-Taste 
Bit 2: Caps-Lock-Taste 
Bit 3: Alternate-Taste 
Bit 4: Control-Taste

Wenn eine normale Taste gedrückt ist, so wird im zweiten Byte der Virtual Key Code eingetragen. Siehe "Inside MacIntosh, Toolbox Essentials". Da bei Apple-Computern zwei Tasten gleichzeitig gedrückt sein können, enthält das dritte Byte den Wert der zweiten Taste, wobei bei zwei gleichzeitig gedrückten Tasten immer der niedrigere Wert im zweiten Byte und der höhere im dritten enthalten ist. Das vierte Byte schließlich enthält den Charakter-Code, wie er durch die 'KCHR'-Resource im Systemordner definiert ist. 
Beispiel:
    REPEAT 
     REPEAT 
      A$= INKEY$ 
     UNTIL LEN(A$) 
     FOR N=1 TO 4 
      PRINT ASC( MID$(A$,N,1)), 
     NEXT 
     IF RIGHT$(A$,1)>=" " THEN PRINT RIGHT$(A$,1) ELSE PRINT 
    UNTIL ASC( MID$(A$,2,1))=53 'Ende mit ESC 
Ergebnis: 
    Es wird gewartet bis der Benutzer eine Taste drückt. Dann werden die ASCII-Werte der vier Zeichen sowie das zur gedrückten Taste gehörende Zeichen auf dem Bildschirm ausgegeben. Das Programm wird abgebrochen, sobald die Escape-Taste gedrückt wurde. 
siehe auch:  INPUT   INPUT$ 
 
 

  INLINE 
Typ: Befehl 
Syntax:  INLINE <String-Ausdruck> 
Erklärung:  Der Befehl führt Maschinensprachebefehle aus. Das Maschinenprogramm muß dabei als Hexcode im <String-Ausdruck> abgelegt sein. 
Es dürfen nur die von Apple als 'volatile' deklarierten Register verändert werden. Im einzelnen sind dies: 
                           R0,R3-R12                       FPR0-FPR13                       CR0,CR1,CR5-CR7 
R31 zeigt auf den dynamischen Stack. Fehler, die Ihr Maschinenprogramm verursacht, können vom Omikron Basic nicht abgefangen werden. Es empfiehlt sich daher, in der Testphase zuvor einen geeigneten Debugger zu starten.

Hinweis: Wenn <String-Ausdruck> eine Konstante ist, kann das Maschinenprogramm schon vom Compiler dekodiert und in den Programmcode eingefügt werden. Dadurch ist eine wesentlich schnellere Ausführung möglich, als bei einer Stringvariablen oder gar einem String-Ausdruck.
Beispiel:  
Ergebnis: 
siehe auch:  CALL   USR 
 
 

  INPUT 
Typ: Befehl 
Syntax:  INPUT [<String-Ausdruck>;]<Variable>[[,<Variable>]] 
INPUT [<Prompt>;]<Variable>[[,<Variable>]] 
Erklärung:  Der INPUT Befehl liest eine oder mehrere Variablen von der Tastatur ein. Wenn angegeben, wird eine Eingabeaufforderung (<Prompt>) ausgegeben, ansonsten einfach ein Fragezeichen. Die Eingabe wird mit [Return] abgeschlossen. Wenn mehrere Werte in einer Zeile eingegeben werden sollen, müssen diese durch Kommata abgetrennt werden. Wenn numerische Variablen eingelesen werden sollen, wird alles bis zum ersten ungültigen Zahlzeichen als Wert übernommen, der Rest wird ignoriert. Führende Leerzeichen werden überlesen. Der Wert, den die Variable vor Ausführung des INPUT-Befehls hatte, spielt keine Rolle. Es wird im jedem Fall ein neuer Wert zugewiesen. Wesentlich erweiterte Möglichkeiten bietet der INPUT USING Befehl.

Hinweis: INPUT  blockiert das System nicht. Die Pseudo-Multitaskingbefhle (z.B. ON TIMER GOSUB) werden weiterhin ausgeführt und auch andere Programme laufen weiter. Auch ein Programmabbruch mit [Ctrl]+[C] ist während der Eingabe möglich.
Beispiel:
    INPUT "Geben Sie 3 Werte ein: ";A,B,C 
    PRINT A,B,C 
    INPUT @(10,0);"Geben Sie Ihren Namen ein: ";N$ 
    PRINT N$ 
Ergebnis: 
    Es werden die Eingaben des Users auf dem Bildschirm dargestellt. 
siehe auch:  INPUT USING   INPUT$   INKEY$ 
 
 

  INPUT # 
Typ: Befehl 
Syntax:  INPUT #<num.Ausdruck>,<Variable>[[,<Variable>]] 
INPUT #<Dateinummer>,<Variable>[[,<Variable>]] 
Erklärung:  Es werden aus einer sequentiellen Datei eine oder mehrere Variablen eingelesen. Wie bei INPUT können mehrere Variablen in einer Zeile durch Kommata getrennt erscheinen.

Wichtig: Mit INPUT # müssen Sie immer eine ganze Zeile der Datei pro INPUT-Anweisung lesen, d.h. die INPUT-Anweisung muß genauso viele Variablen enthalten, wie Werte in einer Zeile stehen. Wenn Sie nicht wissen, wieviele Werte sich in einer Zeile befinden, so lesen Sie besser mit LINE INPUT zunächst die ganze Zeile ein und weisen die verschiedenen Werte erst später den einzelnen Variablen zu.

Achtung: INPUT # ist nicht geeignet, um Daten von der Modemschnittstelle bzw. von der Druckerschnittstelle zu holen. Verwenden Sie dafür INPUT$ oder besser GET
Beispiel:
    OPEN "O",1,FN Get_Fsspec$(0,0,"TEST.DAT") 
    WRITE #1,1,2,3 
    WRITE #1,4,5,6 
    CLOSE 1 
     
    OPEN "I",1,FN Get_Fsspec$(0,0,"TEST.DAT") 
    WHILE NOT EOF(1) 
     INPUT #1,A,B,C 
     PRINT A,B,C 
    WEND 
    CLOSE 1 
Ergebnis: 
     1  2  3  4  5  6
siehe auch:  LINE INPUT #   INPUT$   GET
 
 

  INPUT USING 
Typ: Befehl 
Syntax:  INPUT [<String-Ausdruck>;]<String-Variable> USING <String-Ausdruck>,[<num.Variable>],[<num.Ausdruck>], [<num.Ausdruck>][,<num.Variable>] 
INPUT [<Prompt>;]<Eingabe-Variable> USING <Steuerstring>,[<Rückgabe-Variable>],[<Länge>], [<Füllzeichen>][,<Positions-Variable>] 
Erklärung:  INPUT USING ermöglicht eine formatierte Maskeneingabe mit diversen Einstellungsmöglichkeiten. Abhängig vom Steuerstring werden bei der Eingabe nur bestimmte Zeichen zugelassen:

"0" Ziffern 
"a" Buchstaben (einschl. länderspezifische Zeichen) 
"%" Sonderzeichen (ausschl. länderspezifische Zeichen) 
"^" Ctrl-Zeichen (Eingabe mit [Ctrl]+[A],[Ctrl]+[Buchstabe]) 
"+<Zeichen>" einzelnes Zeichen zulassen 
"-<Zeichen>" einzelnes Zeichen verbieten 

Die Steuerzeichen selbst können groß oder klein geschrieben werden. Um also Namen eingeben zu können, könnte Ihr Steuerstring so aussehen: "A +- +." (Alle Buchstaben einschl. Sonderzeichen, der Bindestrich und der Punkt sind zugelassen). Telefonnummern würde man mit "0 +/" eingeben können. 
Weiterhin besteht die Möglichkeit, bestimmte Zeichen gleich bei der Eingabe umwandeln zu lassen:

"u" alles nach Großbuchstaben wandeln 
"l" alles nach Kleinbuchstaben wandeln 
"c<Zeichen1><Zeichen2>" wird <Zeichen1> eingegeben so wird es automatisch durch <Zeichen 2> ersetzt.

Hinweis: <Zeichen1> muß natürlich auch in der Auswahl der zugelassenen Zeichen sein.

Um also bei einer Zahleneingabe immer sofort statt Dezimalpunkt mit Komma zu arbeiten, würde ein Steuerstring "0 +.+, c.," benötigt. 
Grundsätzlich wird die Eingabe mit [Return] beendet. Sie können jedoch mit dem Steuerstring weitere Tasten oder Ereignisse bestimmen, die die Eingabe beenden: 

"x<Zeichen>" Sobald die Taste mit demselben ASCII-Code wie <Zeichen>  gedrückt wird, wird die Eingabe abgebrochen.

"s<Zeichen>" Sobald die Taste mit demselben VirtuelKeyCode wie der ASCII-Code von <Zeichen> gedrückt wird, wird die Eingabe abgebrochen. Dies ermöglicht z.B. die Unterscheidung zwischen Ziffernblock und Haupttastatur und erlaubt auch den Abbruch durch Tasten, die als ASCII-Code eine Null zurückgeben, wie z.B. [Cursor hoch]. 

"<" linke Randüberschreitung. Die Eingabe wird abgebrochen, wenn der Cursor über den linken Rand hinaus bewegt wird. 

">" rechte Randüberschreitung. Die Eingabe wird abgebrochen, wenn der Cursor über den rechten Rand hinaus bewegt wird. 

Der <Prompt> wird wie bei allen Eingabeanweisungen vor der Eingabe ausgegeben und kann natürlich auch eine Positionsangabe mit "@" enthalten.

Die <Eingabe-Variable> muß immer vom Stringtyp sein, da sie während der Eingabe als Puffer dient. Numerische Eingaben werden nach der Eingabe mittels VAL umgewandelt. 
Die <Rückgabe-Variable> gibt Aufschluß über die Abbruchursache:

 0 die Eingabe wurde mit [Return] verlassen 
-1 linke Randüberschreitung 
-2 rechte Randüberschreitung 

Positive Werte stehen für eine andere Abbruchtaste. Sie wird durch einen vier Byte langen Wert gekennzeichnet, der - ähnlich wie bei INKEY$ - die (C)ommandbits, den (V)irtuelKeyCode und den (A)SCII-Code enthält: $CC VV 00 AA (hexadezimale Darstellung). 

Durch die Angabe einer <Länge> kann die Eingabe auf eine bestimmte Zeichenzahl begrenzt werden. Die Länge sollte immer mit angegeben werden, da eine zu lange Eingabezeile (mehr Spalten als darstellbar) nicht vernünftig funktioniert.

Der ASCII-Code des <Füllzeichens> bestimmt das Zeichen, mit dem die Eingabezeile hinterlegt wird, um das Eingabefeld anzudeuten. Wird nichts angegeben so ist das "_"-Zeichen voreingestellt. Denkbar wäre z.B. 42 ("*") für Zahleneingaben bei Schecks oder 32 (Leerzeichen), wenn gar nicht hinterlegt werden soll.

Die <Positions-Variable> schließlich bestimmt die Position, die der Cursor zu Beginn der Eingabe einnimmt. Sie liefert auch die zuletzt eingenomme Cursor-Position zurück. Man kann also z.B. den Cursor gezielt an die Fehlerstelle bewegen, wenn im Fehlerfall die Eingabe wiederholt werden muß. Es wäre auch denkbar, den Cursor immer wieder an den Anfang der Eingabe zu stellen, um so schneller Korrekturen vornehmen zu können.

Wichtig: Die <Eingabe-Variable> wird im Unterschied zu INPUT nicht in jedem Fall zuerst gelöscht, sondern erscheint als Vorgabe in der Eingabezeile. Damit können Sie dem Anwender bereits sinnvolle Eingaben vorschlagen, z.B. das aktuelle Datum. Es genügt dann ein einfaches [Return], um die Eingabe zu übernehmen. Wenn mehrfach dieselben oder ähnliche Eingaben verlangt werden, kann der alte Wert einfach stehen bleiben oder geringfügig modifiziert übernommen werden.

Nach Beendigung der Eingabe mit INPUT USING wird kein Zeilenvorschub ausgegeben. Soll also die nächste Ausgabe in einer neuen Zeile erfolgen, so muß zuvor mit PRINT ein Zeilenvorschub ausgelöst werden.

Hinweis: INPUT USING blockiert das System nicht. Die Pseudo-Multitaskingbefhle (z.B. ON TIMER GOSUB) werden weiterhin ausgeführt und auch andere Programme laufen weiter. Auch ein Programmabbruch mit [Ctrl]+[C] ist während der Eingabe möglich.
Beispiel:
    Eingabe 
    END 

    DEF PROC Eingabe 
     CLS 
     PRINT @(5,5);"Name :"; 
     PRINT @(6,5);"Straže :"; 
     PRINT @(8,5);"PLZ/Ort :"; 
     PRINT @(10,5);"Telefon :"; 
     PRINT @(13,5);"Angaben in Ordnung (J/N) ?"; 
     Exit$="s"+ CHR$($48)+"s"+ CHR$($50) 
     Max_Feld=5 
     REPEAT 
      SELECT Feld 
       CASE 0: INPUT @(5,15);Name$ USING "a+-+ "+Exit$,Taste,50 
       CASE 1: INPUT @(6,15);Strasse$ USING "a0+ +-"+Exit$,Taste,30 
       CASE 2: INPUT @(8,15);Plz$ USING "0x "+Exit$,Taste,4 
       CASE 3: INPUT @(8,20);Ort$ USING "a0+ +-+/"+Exit$,Taste,50 
       CASE 4: INPUT @(10,15);Tel$ USING "0c-/+/+ "+Exit$,Taste,15 
       CASE 5: Jn$="": INPUT @(13,32);Jn$ USING "u+J+N"+Exit$,Taste,1 
      END_SELECT 
      Scan= HIGH(Taste) AND $FF 
      IF Scan=$48 THEN Feld= MAX(Feld- 1,0):' Cursor hoch 
      IF Scan=$50 OR Taste=0 THEN Feld=MIN(Feld+1,Max_Feld):' Cursor runter 
     UNTIL Jn$="J" 
    END_PROC 

 

Ergebnis: 
    Das Programm ermöglicht die Eingabe einer kompletten Adresse. 
siehe auch:  INPUT   INPUT$   INKEY$    USING 
 
   


DEFDBL  -  FIX blättern INPUT$ - LPRINT

Inhaltsverzeichnis

copyright 1998
Berkhan Software